package com.ht.module.file.service.impl;

import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ht.abnormal.HtException;
import com.ht.config.minio.service.MinioService;
import com.ht.constant.FileConstant;
import com.ht.module.file.entity.FileInfo;
import com.ht.module.file.entity.FileTemporarily;
import com.ht.module.file.mapper.FileTemporarilyMapper;
import com.ht.module.file.service.FileTemporarilyService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ht.util.CommMethod;
import com.ht.util.FileUtil;
import com.ht.util.UserUtil;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import java.math.BigDecimal;

/**
 * <p>
 * 临时文件表 服务实现类
 * </p>
 *
 * @author hejialun
 * @since 2024-09-26
 */
@Service
public class FileTemporarilyServiceImpl extends ServiceImpl<FileTemporarilyMapper, FileTemporarily> implements FileTemporarilyService {
    @Resource
    private MinioService minioService;

    @Override
    public FileTemporarily uploadTemporarilyFile(MultipartFile file, FileTemporarily en) {
        if (BeanUtil.isEmpty(file)) {
            throw new HtException(FileConstant.FILE_NO_EXIST);
        }
        //定义文件实体
        FileTemporarily fileTemporarily = new FileTemporarily();
        CommMethod.beanCreate(file);
        //设置文件名称
        fileTemporarily.setFileName(file.getOriginalFilename());
        //设置文件大小
        fileTemporarily.setFileSize(new BigDecimal(file.getSize() / 1024));
        //获取文件类型
        fileTemporarily.setFileType(FileUtil.getFileNameSuffix(file.getOriginalFilename()));

        //限制单位文件大小不能超过10M
        if (file.getSize() > 1024 * 1024 * 50) {
            throw new HtException("单个文件大小不能超过50M");
        }
        //限制临时文件不能超过两个，多了请删除
        if (this.count(new QueryWrapper<FileTemporarily>().eq("create_user", UserUtil.getUserId())) >= 2) {
            throw new HtException("临时文件不能超过两个，请删除后重新上传!");
        }
        //上传临时文件到minio
        try {
            String filePath = minioService.uploadFile(file);
            fileTemporarily.setFilePath(filePath);
        } catch (Exception e) {
            e.printStackTrace();
            throw new HtException("文件上传失败！请联系管理员");
        }
        //保存实例
        baseMapper.insert(fileTemporarily);
        return fileTemporarily;
    }
}
